#ifndef AST_VARIABLE
#define AST_VARIABLE
#include <string>
#include "node.h"

namespace AST {

    /**
     * Variável
     *
     * Estrutura utilizada para armazenamento de informações de captura de
     * variáveis sem deslocamento de memória utilizadas no sistema. Recebe como
     * parâmetro de construção o conteúdo representante da variável.
     *
     * @category AST
     * @package  AST
     */
    class Variable : public Node {

    private:

        /**
         * Conteúdo Representante
         */
        std::string* _content;

        /**
         * Configuração de Conteúdo
         *
         * Durante a construção de instância desta classe é necessária a
         * apresentação do conteúdo representante da variável do texto
         * processado da entrada.
         *
         * @param  std::string* Conteúdo para Configuração
         * @return Variable*    Próprio Objeto para Encadeamento
         */
        Variable* _setContent(std::string*);

    public:

        /**
         * Construtor Padrão
         *
         * Durante a criação de objeto, existe a necessidade de apresentação do
         * conteúdo representante da variável. Este tipo de objeto não suporta
         * deslocamento, sendo utilizada outra estrutura, mais precisamente os
         * vetores.
         *
         * @param std::string* Conteúdo Representante da Variável
         */
        Variable(std::string*);

        /**
         * Captura do Conteúdo Representante
         *
         * A variável é representada no código de entrada do compilador por uma
         * sequência de caracteres que são configuradas em tempo de construção
         * do objeto. Estes podem ser acessados utilizando o método.
         *
         * @return std::string* Conteúdo Solicitado
         */
        std::string* getContent();

        // Sobrescrita
        std::string toString(int);

    };

};

#endif

